#! /usr/bin/env python
# -*- coding: utf-8 -*-

from playwright.sync_api import Page
from ui_automation_test.common.base_page import BasePage
from ui_automation_test.locators.dualPrevention.riskGrading.fourColor.loc_fourcolor_add import LocFourColor
from ui_automation_test.common.logger import logger


class AddFourColor(BasePage):  
    """
        绘制风险四色图
        :param object_name: 风险分析对象名称
        :param unit_name: 风险分析单元名称
        :param coordinates: 坐标点列表 [(x1,y1), (x2,y2), ...]
    """
    def __init__(self, page: Page):
        super().__init__(page)
        self.switch_menu('双重预防机制')
        self.switch_menu('风险分析清单管理')
        self.switch_menu('风险四色图')
    
    def _parse_wkt_polygon(self, wkt: str) -> list:
        """
        简单解析 WKT 多边形坐标为 [x,y] 列表
        仅处理简单格式：POLYGON((x1 y1, x2 y2, ...))
        """
        try:
            # 提取坐标部分
            coords_str = wkt.replace('POLYGON((', '').replace('))', '')
            coords_pairs = coords_str.split(',')
            result = []
            for pair in coords_pairs:
                x, y = pair.strip().split(' ')
                result.append((float(x), float(y)))
            return result
        except Exception as e:
            print(f"WKT 解析错误: {e}")
            return []
    
    def add_fourcolor(self, object_name, unit_name, coordinates):
        
        # 筛选对应风险单元进行绘制
        logger.info('选择所属风险分析对象')
        self.select(LocFourColor.loc_object_name, object_name)
        logger.info('选择所属风险分析单元')
        self.select(LocFourColor.loc_unit_name, unit_name)          
        logger.info('点击编辑按钮')
        self.click(LocFourColor.loc_edit_button)

        # 解析坐标点
        coords_list = self._parse_wkt_polygon(coordinates)
        if not coords_list:
            raise ValueError("WKT 坐标解析失败")
        self.page.locator('.el-scrollbar.app-main-scrollbar').click()  
        # 在地图上点击绘制多边形
        

        for idx, (x, y) in enumerate(coords_list):
            # 转换为页面相对坐标（若地图有缩放、偏移，需额外处理）
            self.page.mouse.move(x, y)
            self.page.mouse.click()
            # 最后一个点双击完成绘制
            if idx == len(coords_list) - 1:
                self.page.mouse.dblclick() 

        self.page.wait_for_timeout(5000)
        self.click(LocFourColor.loc_submit)